﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using AstekServis.Web.Data;
using Newtonsoft.Json;
using System.Data.Objects.SqlClient;
using System.Text;
using System.Web.Configuration;

namespace AstekServis.Web
{
    /// <summary>
    /// Summary description for MobileService
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class MobileService : System.Web.Services.WebService
    {

        [WebMethod]
        public string EvrakNoKontrol(byte evrakCinsi, string seri, int sira)
        {
            string st = WebConfigurationManager.ConnectionStrings["DbNo1"].ConnectionString;
            string sonuc = "";

            Mikro mk = new Mikro();
            if (sira > 0 && mk.CheckEvrakNo((EvrakTipleri)evrakCinsi, seri, sira, st))
            {
                sonuc = mk.MaxEvrakNo((EvrakTipleri)evrakCinsi, seri, st).ToString();
            }
            else
            {
                sonuc = "true";
            }
            return sonuc;
        }

        [WebMethod]
        public bool CheckStatus()
        {
            return true;
        }

        [WebMethod]
        public string EvrakEkle(string data)
        {
            string sonuc = "";
            try
            {
                Evrak evr = JsonConvert.DeserializeObject<Evrak>(data);
                if (evr != null && evr.Rows.Count > 0)
                {
                    if (!new Mikro().SingleEvrak(evr))
                        sonuc = "ERROR";
                }
            }
            catch (Exception)
            {
                sonuc = "FORMAT HATALI";
            }
            return sonuc;
        }

        [WebMethod]
        public string HizmetFatEkle(string data)
        {
            string sonuc = "";
            try
            {
                Evrak[] evrak = JsonConvert.DeserializeObject<Evrak[]>(data);
                Mikro mk = new Mikro();
                if (evrak != null && evrak.Length > 0)
                {
                    mk.KombineEvrak(evrak);
                }
            }
            catch (Exception)
            {
                sonuc = "FORMAT HATALI";
            }
            return sonuc;
        }

        [WebMethod]
        public string HizmetFatEkle2(string data)
        {
            string sonuc = "";
            try
            {
                Evrak evrak = JsonConvert.DeserializeObject<Evrak>(data);
                Mikro mk = new Mikro();
                if (evrak != null)
                {
                    mk.HizmetFatEkle(evrak);
                }
            }
            catch (Exception)
            {
                sonuc = "FORMAT HATALI";
            }
            return sonuc;
        }

        [WebMethod]
        public bool MontajEkle(string data)
        {
            bool sonuc = false;
            try
            {
                Montaj mt = JsonConvert.DeserializeObject<Montaj>(data);
                using (AsTekEntities ent = new AsTekEntities())
                {
                    var hr = ent.AracHareketleri.Where(x => x.ID == mt.ID).FirstOrDefault();
                    if (hr != null)
                    {
                        hr.KapanmaTarihi = DateTime.Now;
                        hr.KapatanKullanici = mt.TeknisyenID;
                        hr.Durum = 1;
                        hr.Tarih = mt.Tarih;
                        hr.MusteriAdi = mt.Musteri;
                        hr.MusteriTelefon = mt.Telefon;
                        hr.HizmetYeri = mt.Servis;
                        hr.Notlar = mt.Not;
                        hr.TeslimAlan = mt.TeslimAlan;
                        hr.KapamaNedeniID = mt.KapamaNedenID;

                        var arc = ent.Araclar.Where(x => x.ID == hr.AracID).FirstOrDefault();
                        if (arc != null)
                        {
                            arc.FirmwareID = mt.FirmwareID;
                            arc.KoltukSayisi = mt.KoltukAdet;
                            arc.MarkaID = mt.MarkaID;
                            arc.MontajTarihi = mt.MontajTarihi;
                            arc.MontajYeri = mt.MontajYeri;
                            arc.Plaka = mt.Plaka;
                            arc.SasiNo = mt.SasiNo;
                            arc.SistemID = mt.SistemID;
                            arc.UretimYili = new DateTime(Convert.ToInt32(mt.UretimYili), 1, 1);

                            //var ekozellikler = ent.AracOzellikleri.Where(x => x.AracID == arc.ID).ToList();
                            //foreach (var item in ekozellikler)
                            //{
                            //    if (mt.EkOzellikler.Where(x => x.OzellikID == item.OzellikID).Count() > 0)
                            //        item.Deger = mt.EkOzellikler.Where(x => x.OzellikID == item.OzellikID).Select(x => x.Deger).FirstOrDefault();
                            //}

                            foreach (var item in mt.EkOzellikler)
                            {
                                var aracoz = ent.AracOzellikleri.Where(x => x.AracID == arc.ID && x.OzellikID == item.OzellikID).FirstOrDefault();
                                if (aracoz != null)
                                {
                                    aracoz.Deger = item.Deger;
                                }
                                else
                                {
                                    ent.AracOzellikleri.AddObject(new AracOzellik() { AracID = arc.ID, Deger = item.Deger, OzellikID = item.OzellikID });
                                }
                            }

                            var hubs = ent.AracHubYerleri.Where(x => x.AracID == arc.ID).ToList();
                            foreach (var item in hubs)
                            {
                                var i = mt.HubYerleri.Where(x => x.ID == item.ID).FirstOrDefault();
                                if (i != null)
                                {
                                    item.HubKoltukNo = i.HubKoltukNo;
                                    item.MonitorKoltukNo1 = i.MonitorKoltukNo1;
                                    item.MonitorKoltukNo2 = i.MonitorKoltukNo2;
                                    item.MonitorKoltukNo3 = i.MonitorKoltukNo3;
                                    item.MonitorKoltukNo4 = i.MonitorKoltukNo4;
                                    item.MonitorKoltukNo5 = i.MonitorKoltukNo5;
                                    item.MonitorKoltukNo6 = i.MonitorKoltukNo6;
                                }
                            }
                        }
                    }
                    ent.SaveChanges();
                }
                sonuc = true;
            }
            catch (Exception)
            {
                sonuc = false;
            }
            return sonuc;
        }

        [WebMethod]
        public bool ServisEkle(string data)
        {
            bool sonuc = false;
            try
            {
                Service sr = JsonConvert.DeserializeObject<Service>(data);
                using (AsTekEntities ent = new AsTekEntities())
                {
                    var hr = ent.AracHareketleri.Where(x => x.ID == sr.ID).FirstOrDefault();
                    if (hr != null)
                    {
                        hr.KapanmaTarihi = DateTime.Now;
                        hr.KapatanKullanici = sr.TeknisyenID;
                        hr.Durum = 1;
                        hr.MontajSefiTarihi = sr.HareketTarihi;
                        hr.MusteriAdi = sr.Musteri;
                        hr.MusteriTelefon = sr.Telefon;
                        hr.HizmetYeri = sr.Servis;
                        hr.Notlar = sr.Notlar;
                        hr.ServisMerkezID = sr.ServisID;
                        hr.KapamaNedeniID = sr.KapamaNedenID;

                        var knt = ent.ServisKontrolleri.Where(x => x.HareketID == hr.ID).ToList();
                        if (knt.Count > 0)
                        {
                            foreach (var item in knt)
                            {
                                var k = sr.Kontroller.Where(x => x.KontrolID == item.KontrolID).FirstOrDefault();
                                if (k != null)
                                {
                                    item.Deger = k.Deger;
                                }
                            }
                        }

                        var srn = ent.ServisSorunlari.Where(x => x.HareketID == hr.ID && x.Tip == 1).ToList();
                        if (srn.Count > 0)
                        {
                            foreach (var item in srn)
                            {
                                ent.DeleteObject(item);
                            }
                        }

                        if (sr.Sorunlari != null)
                        {
                            foreach (var item in sr.Sorunlari.Where(x => x.Tip == 1))
                            {
                                ent.AddToServisSorunlari(new ServisSorunu()
                                {
                                    HareketID = hr.ID,
                                    Tip = 1,
                                    SorunID = item.SorunID,
                                    Deger = 0
                                });
                            }
                        }

                    }
                    ent.SaveChanges();
                }
                sonuc = true;
            }
            catch (Exception)
            {
                sonuc = false;
            }
            return sonuc;
        }

        [WebMethod]
        public string UserList()
        {
            string sonuc = "";
            using (AsTekEntities ent = new AsTekEntities())
            {
                var liste = ent.Teknisyenler.Select(x => new
                {
                    Adi = x.Adi,
                    ID = x.ID,
                    DepoNo = x.DepoNo,
                    FirmaNo = x.FirmaNo,
                    KullanilabilirDepolar = x.KullanilabilirDepolar,
                    MikroKullanici = x.MikroKullanici,
                    Plasiyer = x.PlasiyerKodu,
                    Sifre = x.Sifre,
                    SrmMerkezi = x.SrmMerkezi,
                    SubeNo = x.SubeNo,
                    EvrakSeri = x.EvrakSeri,
                    GuncellemeSuresi = ent.Parametreler.Where(y => y.Kodu == 2).Select(y => y.Deger).FirstOrDefault(),
                    ArizaliDepoNo = x.ArizaliDepoNo,
                    DbNo = x.DbNo
                }).ToList();

                if (liste.Count > 0)
                {
                    sonuc = JsonConvert.SerializeObject(liste.OrderBy(x => x.Adi));
                }
                else
                {
                    sonuc = "ERROR";
                }
            }
            return sonuc;
        }

        [WebMethod]
        public string DepoList()
        {
            string sonuc = "";
            using (AsTekEntities ent = new AsTekEntities())
            {
                var liste = ent.Depolar.Select(x => new { Adi = x.Adi, ID = x.ID, No = x.No }).ToList();
                if (liste.Count > 0)
                {
                    sonuc = JsonConvert.SerializeObject(liste);
                }
                else
                {
                    sonuc = "ERROR";
                }
            }
            return sonuc;
        }

        [WebMethod]
        public string UrunBilgileri(string kod)
        {
            string sonuc = "";
            using (AsTekEntities ent = new AsTekEntities())
            {
                object res = Methods.ExecuteSql(ent, string.Format("select dbo.fn_AsTek_UrunBul('{0}')", kod));
                if (res != null && res != DBNull.Value)
                {
                    string stokkod = res.ToString();
                    var stok = ent.StokBilgileri.Where(x => x.Kodu == stokkod).FirstOrDefault();
                    if (stok != null)
                    {
                        TermStok stk = new TermStok();
                        stk.Adi = stok.Adi;
                        stk.Doviz = stok.Doviz;
                        stk.Fiyat = stok.Fiyat;
                        stk.ID = stok.ID;
                        stk.Kdv = stok.Kdv;
                        stk.Kodu = stok.Kodu;
                        stk.Serinolu = stok.Serinolu;
                        stk.KdvOrani = stok.KdvOran;

                        var parca = ent.ParcaTanimlari.Where(x => x.AnaUrunKodu == stok.Kodu).ToList();
                        if (parca.Count > 0)
                        {
                            stk.ParcaAciklama = parca[0].Aciklamasi;
                            stk.Parcalar.AddRange(parca.Select(x => new TermParcaStok { Adi = x.ParcaAdi, Doviz = x.DovizCins, Fiyat = x.ParcaFiyati, HizmetKodu = x.HizmetKodu, ID = x.ID }).ToArray());
                        }
                        sonuc = JsonConvert.SerializeObject(stk);
                    }
                    else
                    {
                        sonuc = "ERROR";
                    }
                }
                else
                {
                    var stok = ent.StokBilgileri.Where(x => x.Kodu == kod).FirstOrDefault();
                    if (stok != null)
                    {
                        TermStok stk = new TermStok();
                        stk.Adi = stok.Adi;
                        stk.Doviz = stok.Doviz;
                        stk.Fiyat = stok.Fiyat;
                        stk.ID = stok.ID;
                        stk.Kdv = stok.Kdv;
                        stk.Kodu = stok.Kodu;
                        stk.Serinolu = stok.Serinolu;
                        stk.KdvOrani = stok.KdvOran;

                        var parca = ent.ParcaTanimlari.Where(x => x.AnaUrunKodu == stok.Kodu).ToList();
                        if (parca.Count > 0)
                        {
                            stk.ParcaAciklama = parca[0].Aciklamasi;
                            stk.Parcalar.AddRange(parca.Select(x => new TermParcaStok { Adi = x.ParcaAdi, Doviz = x.DovizCins, Fiyat = x.ParcaFiyati, HizmetKodu = x.HizmetKodu, ID = x.ID }).ToArray());
                        }
                        sonuc = JsonConvert.SerializeObject(stk);
                    }
                    else
                    {
                        sonuc = "ERROR";
                    }
                }
            }
            return sonuc;
        }

        [WebMethod]
        public string UrunArama(string koduAdi)
        {
            string sonuc = "";
            using (AsTekEntities ent = new AsTekEntities())
            {
                var stok = ent.StokBilgileri.Where(x => SqlFunctions.PatIndex(koduAdi, x.Kodu) > 0 || SqlFunctions.PatIndex(koduAdi, x.Adi) > 0).ToList();
                if (stok != null)
                {
                    sonuc = JsonConvert.SerializeObject(stok);
                }
                else
                {
                    sonuc = "ERROR";
                }
            }
            return sonuc;
        }

        [WebMethod]
        public string UrunListesi()
        {
            string sonuc = "";
            using (AsTekEntities ent = new AsTekEntities())
            {
                var stok = ent.StokBilgileri.ToList();
                if (stok != null)
                {
                    sonuc = JsonConvert.SerializeObject(stok);
                }
                else
                {
                    sonuc = "ERROR";
                }
            }
            return sonuc;
        }

        [WebMethod]
        public string MontajListesi(int acikMontaj, int teknisyenID)
        {
            string sonuc = "";
            using (AsTekEntities ent = new AsTekEntities())
            {
                var liste = (from h in ent.AracHareketleri
                             join m in ent.MontajListesi on h.ID equals m.ID
                             join a in ent.Araclar on h.AracID equals a.ID
                             where m.Durum == acikMontaj && (h.TeknisyenID1 == teknisyenID || h.TeknisyenID2 == teknisyenID && h.TeknisyenID3 == teknisyenID || h.TeknisyenID4 == teknisyenID || h.TeknisyenID5 == teknisyenID)
                             select new
                             {
                                 ID = h.ID,
                                 Tarih = m.Tarih,
                                 Firma = m.Firma,
                                 Grup = m.Grup,
                                 Plaka = m.Plaka,
                                 AracID = h.AracID,
                                 Adres = m.Adres,
                                 FirmwareID = a.FirmwareID,
                                 KoltukAdet = a.KoltukSayisi,
                                 MarkaID = a.MarkaID,
                                 MontajTarihi = h.Tarih,
                                 MontajYeri = a.MontajYeri,
                                 Musteri = h.MusteriAdi,
                                 SasiNo = a.SasiNo,
                                 SistemID = a.SistemID,
                                 Telefon = h.MusteriTelefon,
                                 UretimYili = a.UretimYili.Year,
                                 Servis = h.HizmetYeri,
                                 Not = h.Notlar,
                                 TeslimAlan = h.TeslimAlan,
                                 AracKodu = a.AracKodu
                             }).ToList();

                if (liste.Count > 0)
                {
                    sonuc = JsonConvert.SerializeObject(liste);
                }
                else
                {
                    sonuc = "ERROR";
                }
            }
            return sonuc;
        }

        [WebMethod]
        public string ServisListesi(string acikMontaj, int teknisyenID, DateTime tarih)
        {
            string sonuc = "";
            DateTime baslangic = new DateTime(tarih.Year, tarih.Month, tarih.Day);
            DateTime bitis = new DateTime(tarih.Year, tarih.Month, tarih.Day, 23, 59, 59);
            DateTime bugun = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);

            using (AsTekEntities ent = new AsTekEntities())
            {
                var liste = (from h in ent.AracHareketleri
                             join m in ent.ServisListesi on h.ID equals m.ID
                             join a in ent.AracBilgileri on h.AracID equals a.ID
                             where m.Durum == acikMontaj && (h.TeknisyenID1 == teknisyenID || h.TeknisyenID2 == teknisyenID && h.TeknisyenID3 == teknisyenID || h.TeknisyenID4 == teknisyenID || h.TeknisyenID5 == teknisyenID)
                             orderby h.AracHareketTarihi
                             select new Service
                             {
                                 ID = h.ID,
                                 HareketTarihi = h.AracHareketTarihi,
                                 Firma = m.Firma,
                                 Grup = m.Grup,
                                 Plaka = m.Plaka,
                                 Servis = m.Servis,
                                 Sorunlar = m.Sorunlar,
                                 HizmetYeri = h.HizmetYeri,
                                 MontajTarihi = a.MontajTarihi,
                                 Musteri = h.MusteriAdi,
                                 Telefon = h.MusteriTelefon,
                                 ServisID = h.ServisMerkezID,
                                 Sistem = a.SistemAdi,
                                 FirmaKodu = m.AltCariKodu,
                                 AracKodu = m.AracKodu,
                                 SozlesmeVar = ent.GarantiSozlesmeleri.Where(x => x.AracID == m.AracID && x.BaslangicTarihi <= tarih && x.BitisTarihi >= tarih).Select(x => x.ID).Count(),
                                 GarantiSure = ent.Parametreler.Where(x => x.Kodu == 1).Select(x => x.Deger).FirstOrDefault(),
                                 GelisTarihi = h.AracGelisTarihi
                             }).ToList();

                if (liste.Count > 0)
                {
                    sonuc = JsonConvert.SerializeObject(liste);
                }
                else
                {
                    sonuc = "ERROR";
                }
            }
            return sonuc;
        }

        [WebMethod]
        public string FirmwareList()
        {
            string sonuc = "";
            using (AsTekEntities ent = new AsTekEntities())
            {
                var liste = ent.FirmwareTanimlari.Select(x => new { Adi = x.Aciklama, ID = x.ID }).ToList();
                if (liste.Count > 0)
                {
                    sonuc = JsonConvert.SerializeObject(liste);
                }
                else
                {
                    sonuc = "ERROR";
                }
            }
            return sonuc;
        }

        [WebMethod]
        public string SistemList()
        {
            string sonuc = "";
            using (AsTekEntities ent = new AsTekEntities())
            {
                var liste = ent.SistemTanimlari.Select(x => new { Adi = x.Aciklama, ID = x.ID }).ToList();
                if (liste.Count > 0)
                {
                    sonuc = JsonConvert.SerializeObject(liste);
                }
                else
                {
                    sonuc = "ERROR";
                }
            }
            return sonuc;
        }

        [WebMethod]
        public string KapamaSebepList()
        {
            string sonuc = "";
            using (AsTekEntities ent = new AsTekEntities())
            {
                var liste = ent.KapamaSebepleri.Select(x => new { Adi = x.Adi, ID = x.ID }).ToList();
                if (liste.Count > 0)
                {
                    sonuc = JsonConvert.SerializeObject(liste);
                }
                else
                {
                    sonuc = "ERROR";
                }
            }
            return sonuc;
        }

        [WebMethod]
        public string EkOzellikList()
        {
            string sonuc = "";
            using (AsTekEntities ent = new AsTekEntities())
            {
                var liste = ent.OzellikTanimlari.Select(x => new { Adi = x.OzellikAdi, ID = x.ID, Zorunlu = x.Zorunlu }).ToList();
                if (liste.Count > 0)
                {
                    sonuc = JsonConvert.SerializeObject(liste);
                }
                else
                {
                    sonuc = "ERROR";
                }
            }
            return sonuc;
        }

        [WebMethod]
        public string AracEkOzellikList(int aracID)
        {
            string sonuc = "";
            using (AsTekEntities ent = new AsTekEntities())
            {
                var liste = ent.AracOzellikleri.Where(x => x.AracID == aracID).Select(x => new { x.Deger, x.ID, x.OzellikID }).ToList();
                if (liste.Count > 0)
                {
                    sonuc = JsonConvert.SerializeObject(liste);
                }
                else
                {
                    sonuc = "ERROR";
                }
            }
            return sonuc;
        }

        [WebMethod]
        public string MarkaList()
        {
            string sonuc = "";
            using (AsTekEntities ent = new AsTekEntities())
            {
                var liste = ent.AracMarkalari.Select(x => new { x.ID, x.MarkaAdi }).ToList();
                if (liste.Count > 0)
                {
                    sonuc = JsonConvert.SerializeObject(liste);
                }
                else
                {
                    sonuc = "ERROR";
                }
            }
            return sonuc;
        }

        [WebMethod]
        public string ServisSorunList()
        {
            string sonuc = "";
            using (AsTekEntities ent = new AsTekEntities())
            {
                var liste = ent.ServisSorunTanimlari.Where(x => x.Tip == 1).Select(x => new { x.ID, x.SorunTanimi }).ToList();
                if (liste.Count > 0)
                {
                    sonuc = JsonConvert.SerializeObject(liste);
                }
                else
                {
                    sonuc = "ERROR";
                }
            }
            return sonuc;
        }

        [WebMethod]
        public string KontrolTanimList()
        {
            string sonuc = "";
            using (AsTekEntities ent = new AsTekEntities())
            {
                var liste = ent.ServisKontrolTanimlari.Select(x => new { x.ID, x.KontrolAdi }).ToList();
                if (liste.Count > 0)
                {
                    sonuc = JsonConvert.SerializeObject(liste);
                }
                else
                {
                    sonuc = "ERROR";
                }
            }
            return sonuc;
        }

        [WebMethod]
        public string AracSorunBilgileri(int hareketID)
        {
            string sonuc = "";
            using (AsTekEntities ent = new AsTekEntities())
            {
                var liste = (from s in ent.ServisSorunlari
                             join t in ent.ServisSorunTanimlari on s.SorunID equals t.ID
                             where s.HareketID == hareketID
                             select new { s.ID, s.SorunID, t.SorunTanimi, s.Deger, s.Tip }).ToList();
                if (liste.Count > 0)
                {
                    sonuc = JsonConvert.SerializeObject(liste);
                }
                else
                {
                    sonuc = "ERROR";
                }
            }
            return sonuc;
        }

        [WebMethod]
        public string AracKontrolBilgileri(int hareketID)
        {
            string sonuc = "";
            using (AsTekEntities ent = new AsTekEntities())
            {
                var liste = (from k in ent.ServisKontrolleri
                             join t in ent.ServisKontrolTanimlari on k.KontrolID equals t.ID
                             where k.HareketID == hareketID
                             select new { k.ID, k.KontrolID, t.KontrolAdi, k.Deger }).ToList();
                if (liste.Count > 0)
                {
                    sonuc = JsonConvert.SerializeObject(liste);
                }
                else
                {
                    sonuc = "ERROR";
                }
            }
            return sonuc;
        }

        [WebMethod]
        public string CariBilgi(int CariID)
        {
            string sonuc = "";
            using (AsTekEntities ent = new AsTekEntities())
            {
                var liste = ent.Firmalar.Where(x => x.ID == CariID).Select(x => new { x.ID, x.AnaCariKodu, x.CariKodu, x.CariUnvan1, x.CariUnvan2, x.Tipi, x.Adres, x.VergiDaire, x.VergiNo }).FirstOrDefault();
                if (liste != null)
                {
                    sonuc = JsonConvert.SerializeObject(liste);
                }
                else
                {
                    sonuc = "ERROR";
                }
            }
            return sonuc;
        }

        [WebMethod]
        public string CariBilgi2(string CariKodu)
        {
            string sonuc = "";
            using (AsTekEntities ent = new AsTekEntities())
            {
                var liste = ent.Firmalar.Where(x => x.CariKodu == CariKodu).Select(x => new { x.ID, x.AnaCariKodu, x.CariKodu, x.CariUnvan1, x.CariUnvan2, x.Tipi, x.Adres, x.VergiDaire, x.VergiNo }).FirstOrDefault();
                if (liste != null)
                {
                    sonuc = JsonConvert.SerializeObject(liste);
                }
                else
                {
                    sonuc = "ERROR";
                }
            }
            return sonuc;
        }

        [WebMethod]
        public string FirmaListe()
        {
            string sonuc = "";
            using (AsTekEntities ent = new AsTekEntities())
            {
                var liste = ent.FirmaListesi.Select(x => new { x.ID, x.AnaCariKodu, x.CariKodu, x.CariUnvan1, x.CariUnvan2, x.Tipi }).ToList();
                if (liste.Count > 0)
                {
                    sonuc = JsonConvert.SerializeObject(liste);
                }
                else
                {
                    sonuc = "ERROR";
                }
            }
            return sonuc;
        }

        [WebMethod]
        public string AnaCariListe()
        {
            string sonuc = "";
            using (AsTekEntities ent = new AsTekEntities())
            {
                var liste = ent.AnaCariler.Select(x => new { x.ID, x.AnaCariKodu, x.CariKodu, x.CariUnvan1, x.CariUnvan2, x.Tipi }).ToList();
                if (liste.Count > 0)
                {
                    sonuc = JsonConvert.SerializeObject(liste);
                }
                else
                {
                    sonuc = "ERROR";
                }
            }
            return sonuc;
        }

        [WebMethod]
        public string AracBilgileri(string aracKodu)
        {
            string sonuc = "";
            using (AsTekEntities ent = new AsTekEntities())
            {
                var liste = ent.Araclar.Where(x => x.AracKodu == aracKodu).Select(x => new TermArac()
                {
                    AltCariKodu = x.AltCariKodu,
                    AnaCariKodu = x.AnaCariKodu,
                    FirmwareID = x.FirmwareID,
                    ID = x.ID,
                    Kodu = x.AracKodu,
                    KoltukSayisi = x.KoltukSayisi,
                    MarkaID = x.MarkaID,
                    Plaka = x.Plaka,
                    SasiNo = x.SasiNo,
                    SistemID = x.SistemID,
                    SistemNo = x.SistemNo,
                    UretimYili = x.UretimYili
                }).FirstOrDefault();

                if (liste != null)
                {
                    sonuc = JsonConvert.SerializeObject(liste);
                }
                else
                {
                    sonuc = "ERROR";
                }
            }
            return sonuc;
        }

        [WebMethod]
        public bool AracBilgiGuncelle(string data)
        {
            bool sonuc = false;
            try
            {
                TermArac hr = JsonConvert.DeserializeObject<TermArac>(data);
                using (AsTekEntities ent = new AsTekEntities())
                {
                    var arc = ent.Araclar.Where(x => x.ID == hr.ID).FirstOrDefault();
                    if (arc != null)
                    {
                        arc.FirmwareID = hr.FirmwareID;
                        arc.KoltukSayisi = hr.KoltukSayisi;
                        arc.Plaka = hr.Plaka;
                        arc.SasiNo = hr.SasiNo;
                        arc.SistemID = hr.SistemID;
                        arc.UretimYili = arc.UretimYili;
                        arc.AltCariKodu = hr.AltCariKodu;
                        arc.AnaCariKodu = hr.AnaCariKodu;
                        arc.FirmwareID = hr.FirmwareID;
                        arc.MarkaID = hr.MarkaID;
                        arc.SistemNo = hr.SistemNo;


                        foreach (var item in hr.EkOzellikler)
                        {
                            var aracoz = ent.AracOzellikleri.Where(x => x.AracID == arc.ID && x.OzellikID == item.OzellikID).FirstOrDefault();
                            if (aracoz != null)
                            {
                                aracoz.Deger = item.Deger;
                            }
                            else
                            {
                                ent.AracOzellikleri.AddObject(new AracOzellik() { AracID = arc.ID, Deger = item.Deger, OzellikID = item.OzellikID });
                            }
                        }

                        var hubs = ent.AracHubYerleri.Where(x => x.AracID == arc.ID).ToList();
                        foreach (var item in hubs)
                        {
                            var i = hr.HubYerleri.Where(x => x.ID == item.ID).FirstOrDefault();
                            if (i != null)
                            {
                                item.HubKoltukNo = i.HubKoltukNo;
                                item.MonitorKoltukNo1 = i.MonitorKoltukNo1;
                                item.MonitorKoltukNo2 = i.MonitorKoltukNo2;
                                item.MonitorKoltukNo3 = i.MonitorKoltukNo3;
                                item.MonitorKoltukNo4 = i.MonitorKoltukNo4;
                                item.MonitorKoltukNo5 = i.MonitorKoltukNo5;
                                item.MonitorKoltukNo6 = i.MonitorKoltukNo6;
                            }
                        }

                        ent.SaveChanges();
                    }
                }
                sonuc = true;
            }
            catch (Exception)
            {
                sonuc = false;
            }
            return sonuc;
        }

        [WebMethod]
        public string ServisMerkezleri()
        {
            string sonuc = "";
            using (AsTekEntities ent = new AsTekEntities())
            {
                var liste = ent.ServisMerkezleri.Select(x => new { x.ID, x.Adi }).ToList();
                if (liste.Count > 0)
                {
                    sonuc = JsonConvert.SerializeObject(liste);
                }
                else
                {
                    sonuc = "ERROR";
                }
            }
            return sonuc;
        }

        [WebMethod]
        public string AracHubYerleri(int aracID)
        {
            string sonuc = "";
            using (AsTekEntities ent = new AsTekEntities())
            {
                var liste = ent.AracHubYerleri.Where(x => x.AracID == aracID).Select(x => new { x.ID, x.HubKoltukNo, x.MonitorKoltukNo1, x.MonitorKoltukNo2, x.MonitorKoltukNo3, x.MonitorKoltukNo4, x.MonitorKoltukNo5, x.MonitorKoltukNo6, x.MonitorKoltukNo7 }).ToList();
                if (liste.Count > 0)
                {
                    sonuc = JsonConvert.SerializeObject(liste);
                }
                else
                {
                    sonuc = "ERROR";
                }
            }
            return sonuc;
        }

        [WebMethod]
        public string HizmetKartlari()
        {
            string sonuc = "";
            using (AsTekEntities ent = new AsTekEntities())
            {
                var liste = ent.HizmetKartListesi.Select(x => new { x.ID, x.HizmetKodu, x.Fiyati, x.Aciklama, x.KdvOran, x.KdvSira }).ToList();
                if (liste.Count > 0)
                {
                    sonuc = JsonConvert.SerializeObject(liste);
                }
                else
                {
                    sonuc = "ERROR";
                }
            }
            return sonuc;
        }

        [WebMethod]
        public string DovizKurlari()
        {
            string sonuc = "";
            using (AsTekEntities ent = new AsTekEntities())
            {
                var liste = ent.DovizKurlari.ToList();
                if (liste.Count > 0)
                {
                    sonuc = JsonConvert.SerializeObject(liste);
                }
                else
                {
                    sonuc = "ERROR";
                }
            }
            return sonuc;
        }

        [WebMethod]
        public string HizmetFaturaBilgi(string seri, int sira, int dbNo, byte faturaTip, bool cariBilgileriYazdir)
        {
            StringBuilder sb = new StringBuilder();
            using (AsTekEntities ent = new AsTekEntities())
            {
                List<HizmetFaturaBilgisi> evr = ent.AsTek_HizmetFaturaBilgi(seri, sira, dbNo, faturaTip).ToList();

                if (evr.Count > 0)
                {
                    var dizayn = ent.FormTasarimlari.Where(x => x.Tip == 0).ToList();
                    int maxSatir = dizayn.Select(x => x.Satir).Max() + 1;

                    string emptyLine = "";
                    for (int i = 0; i < 40; i++)
                        emptyLine += " ";

                    string[] dizi = new string[maxSatir];
                    for (int i = 0; i < maxSatir; i++)
                    {
                        dizi[i] = emptyLine;
                    }

                    foreach (var d in dizayn)
                    {
                        switch (d.AlanKodu)
                        {
                            case 0:
                                if (cariBilgileriYazdir)
                                    dizi[d.Satir] = dizi[d.Satir].Yerlestir(d.Sutun, evr.Select(x => x.CariKodu).FirstOrDefault().SolaYasla(d.Genislik));
                                break;
                            case 1:
                                if (cariBilgileriYazdir)
                                    dizi[d.Satir] = dizi[d.Satir].Yerlestir(d.Sutun, evr.Select(x => x.CariUnvani).FirstOrDefault().SolaYasla(d.Genislik));
                                break;
                            case 2:
                                if (cariBilgileriYazdir)
                                    dizi[d.Satir] = dizi[d.Satir].Yerlestir(d.Sutun, evr.Select(x => x.Adres).FirstOrDefault().SolaYasla(d.Genislik));
                                break;
                            case 3:
                                if (cariBilgileriYazdir)
                                    dizi[d.Satir] = dizi[d.Satir].Yerlestir(d.Sutun, evr.Select(x => x.VergiDaire).FirstOrDefault().SolaYasla(d.Genislik));
                                break;
                            case 4:
                                if (cariBilgileriYazdir)
                                    dizi[d.Satir] = dizi[d.Satir].Yerlestir(d.Sutun, evr.Select(x => x.VergiNo).FirstOrDefault().SolaYasla(d.Genislik));
                                break;
                            case 5:
                                dizi[d.Satir] = dizi[d.Satir].Yerlestir(d.Sutun, evr.Select(x => x.Tarih).FirstOrDefault().SolaYasla(d.Genislik));
                                break;

                            case 16:
                                dizi[d.Satir] = dizi[d.Satir].Yerlestir(d.Sutun, (seri + "/" + sira).SolaYasla(d.Genislik));
                                break;

                            case 17:
                                dizi[d.Satir] = dizi[d.Satir].Yerlestir(d.Sutun, evr.Select(x => x.belgeno).FirstOrDefault().SolaYasla(d.Genislik));
                                break;

                            case 6: //toplam
                                string data = "TOPLAM     :" + evr.Select(x => x.AraToplam).Sum().SagaYasla(d.Genislik);
                                dizi[d.Satir] = dizi[d.Satir].Yerlestir(d.Sutun, data);
                                break;
                            case 7: //iskonto
                                dizi[d.Satir] = dizi[d.Satir].Yerlestir(d.Sutun, "ISKONTO    :" + evr.Select(x => x.Iskonto).Sum().SagaYasla(d.Genislik));
                                break;
                            case 8: //ara toplam
                                dizi[d.Satir] = dizi[d.Satir].Yerlestir(d.Sutun, "ARA TOPLAM :" + evr.Select(x => x.AraToplam - x.Iskonto).Sum().SagaYasla(d.Genislik));
                                break;
                            case 9: //vergi
                                dizi[d.Satir] = dizi[d.Satir].Yerlestir(d.Sutun, "KDV        :" + evr.Select(x => x.Kdv).Sum().SagaYasla(d.Genislik));
                                break;
                            case 10: //yekun
                                dizi[d.Satir] = dizi[d.Satir].Yerlestir(d.Sutun, "YEKUN      :" + evr.Select(x => x.Meblag).Sum().SagaYasla(d.Genislik));
                                break;
                        }
                    }

                    int idx = dizayn.Where(x => x.AlanKodu == 13).Select(x => x.Satir).FirstOrDefault();
                    foreach (var s in evr)
                    {
                        foreach (var d in dizayn)
                        {
                            switch (d.AlanKodu)
                            {
                                case 11: //hizmet kodu
                                    dizi[idx] = dizi[idx].Yerlestir(d.Sutun, s.HizmetKodu.SolaYasla(d.Genislik));
                                    break;
                                case 12: //hizmet adı
                                    dizi[idx] = dizi[idx].Yerlestir(d.Sutun, s.HizmetAdi.SolaYasla(d.Genislik));
                                    break;
                                case 13: //miktar
                                    dizi[idx] = dizi[idx].Yerlestir(d.Sutun, s.Miktar.SagaYasla(d.Genislik));
                                    break;
                                case 14: //fiyat
                                    dizi[idx] = dizi[idx].Yerlestir(d.Sutun, (s.AraToplam / s.Miktar).SagaYasla(d.Genislik));
                                    break;
                                case 15: //tutar
                                    dizi[idx] = dizi[idx].Yerlestir(d.Sutun, s.AraToplam.SagaYasla(d.Genislik));
                                    break;
                            }
                        }
                        idx++;
                    }

                    for (int i = 1; i < dizi.Length; i++)
                    {
                        sb.AppendLine(dizi[i]);
                    }
                }
                else
                {
                    sb.Append("EVRAK YOK");
                }
            }
            return sb.ToString();
        }

        [WebMethod]
        public string ServisBagliEvraklar(int servisID)
        {
            string sonuc = "";
            using (AsTekEntities ent = new AsTekEntities())
            {
                var liste = ent.FaturaBaglantilari.Where(x => x.ServisID == servisID).Select(x => new { x.EvrakTipi, x.EvrakSeri, x.EvrakSira }).AsEnumerable().Select(x => new { EvrakTipi = ((EvrakTipleri)x.EvrakTipi).ToString(), x.EvrakSeri, x.EvrakSira }).ToList();
                if (liste.Count > 0)
                {
                    sonuc = JsonConvert.SerializeObject(liste);
                }
                else
                {
                    sonuc = "ERROR";
                }
            }
            return sonuc;
        }

    }
}
